package utilidades;



import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;






import clasesBasicas.Empresa;

/** Clase que mete los datos extraidos del archivo html (que están en un arraylist) en la base de datos. Se implementa en el lado del servidor.
 * @author kevincifuentes
 *
 */
public class IntroducirDatos {

	private Connection conexion;


	/** Método que introduce los datos del arraylist en la base de datos.
	 * @param listaEmp La lista con la información de las empresas.
	 */
	public void introducir(ArrayList <Empresa> listaEmp) {

		if(estaOn() == true){
			System.out.println("Estoyyy aquiiiii");
			try { 
				//	    	System.out.println("entra");
				Class.forName("oracle.jdbc.OracleDriver"); 
				//	        System.out.println("paso1");
				//        	String BaseDeDatos = "jdbc:oracle:thin:@192.168.0.14:1521:XE"; // IP LOCAL
				//	        String BaseDeDatos = "jdbc:oracle:thin:@85.84.97.170:1521:XE";  // IP EXTERNADINAMICA
				String BaseDeDatos = "jdbc:oracle:thin:@bdprog4.no-ip.org:1521:XE";  // URL ESTATICA

				//	        System.out.println("paso2");
				//	        EnvioEmail eE= new EnvioEmail();
				//    		eE.send("programatrading@gmail.com", "guachupo69", "smtp.gmail.com", "465","inigarcia9@gmail.com", "������Bienvenido a IbexTrading!", "������Hola "+"Usuario"+"! \n ������Bienvenido a el programa trading lider del mercado! \n Gracias por probar nuestro programa y esperamos que aprenda mucho.\n \n Si tiene alguna duda, no dude en contactar con programatrading@gmail.com.\n \n Un saludo, \n El equipo de IbexTrading.");

				conexion = DriverManager.getConnection(BaseDeDatos, "admin","admin"); 
				//	        System.out.println("paso3");
				if (conexion != null) { 
					System.out.println("Conexion exitosa!"); 
				} else { 
					System.out.println("Conexion fallida!"); 
				} 
			} catch (Exception e) { 
				System.out.println("error 1");

				e.printStackTrace(); 
			} 
			PreparedStatement stmt = null;
			PreparedStatement stmt2 = null;
			try {

				Timestamp timest = listaEmp.get(0).getHoraDeInfo();

				String dia=listaEmp.get(0).getHoraDeInfo().toString().substring(8,10);
				String mes =listaEmp.get(0).getHoraDeInfo().toString().substring(5,7);
				String annio =listaEmp.get(0).getHoraDeInfo().toString().substring(0,4);
				String fecha =dia+"-";
				switch ( Integer.parseInt(mes))
				{
				case 1:fecha=fecha+"ENE-";
				break;
				case 2:fecha=fecha+"FEB-";
				break;
				case 3:fecha=fecha+"MAR-";
				break;
				case 4:fecha=fecha+"ABR-";
				break;
				case 5:fecha=fecha+"MAY-";
				break;
				case 6:fecha=fecha+"JUN-";
				break;
				case 7:fecha=fecha+"JUL-";
				break;
				case 8:fecha=fecha+"AGO-";
				break;
				case 9:fecha=fecha+"SEP-";
				break;
				case 10:fecha=fecha+"OCT-";
				break;
				case 11:fecha=fecha+"NOV-";
				break;
				case 12:fecha=fecha+"DIC-";
				break;
				}
				fecha=fecha+annio;

				for (int i=0;i<listaEmp.size();i++)
				{


					stmt = conexion.prepareStatement("INSERT INTO valor_actual VALUES (?,?,?)");

					stmt.setInt(1,(i+1));
					stmt.setTimestamp(2,timest);
					stmt.setDouble(3,listaEmp.get(i).getUltimo());
					int a=stmt.executeUpdate();//INSERTA DATOS BIEN
					
					
					stmt.close();
					//	
					int codemp=i+1;
					stmt2 = conexion.prepareStatement  ("UPDATE EMPRESA SET ULTIMO="+listaEmp.get(i).ultimo+",MAX_DIARIO="+listaEmp.get(i).maximo+",MIN_DIARIO="
							+listaEmp.get(i).minimo+",VOLUMEN="+listaEmp.get(i).volumen+",DIFERENCIA="+listaEmp.get(i).diferencia+" WHERE COD_EMPRESA="+codemp);

//					stmt2.setDouble(1,listaEmp.get(i).ultimo);
//					stmt2.setDouble(2,listaEmp.get(i).maximo);
//					stmt2.setDouble(3,listaEmp.get(i).minimo);
//					stmt2.setDouble(4,listaEmp.get(i).volumen);
//					stmt2.setDouble(5,listaEmp.get(i).diferencia);
//					stmt2.setInt(5,i+1);
				
					 
					int b=stmt2.executeUpdate();
					//				
					System.out.println("upDATADOOO  en "+i+1);

					stmt2.close();

				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
			e.printStackTrace();
			}
			
			try {
				conexion.close();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				System.out.println("INtroducir Datos error 2");
			}
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("introducir Datos error 2");
			}
			
		}else{
			System.out.println("Esta cerrada la bolsa.");
		}
		

	} 

	/** Método que determina si la bolsa está abierta.
	 * @return Devuelve true si está abierta o false si no lo está.
	 */
	public static boolean estaOn(){
		
		Date temp = Calendar.getInstance().getTime();
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(temp);

		int diaSemana = cal.get(Calendar.DAY_OF_WEEK);

		//Comprobar la hora.
		Calendar calendario = Calendar.getInstance();
		int hora, minutos, segundos;
		hora =calendario.get(Calendar.HOUR_OF_DAY);
		minutos = calendario.get(Calendar.MINUTE);
		segundos = calendario.get(Calendar.SECOND);
		System.out.println("Son las: "+hora + ":" + minutos + ":" + segundos);

		//Comprueba que día es hoy, para saber si la bolsa esta abierta o no.
		//1 de Enero / 18-21 de Abril / 1 de Mayo / 25-26 de Diciembre CERRADO
		//Sabado y Domingo CERRADO  Tambien comprueba que la hore este entre las 9 y las 17:30
		if(diaSemana != 1 && diaSemana != 7)
		{

			switch(cal.get(Calendar.MONTH)){
			case 0:
				if(cal.get(Calendar.DAY_OF_MONTH) == 1)
					return false;
				break;
			case 3:
				if(cal.get(Calendar.DAY_OF_MONTH) == 18 || cal.get(Calendar.DAY_OF_MONTH) == 21)
					return false;
				break;
			case 4:
				if(cal.get(Calendar.DAY_OF_MONTH) == 1)
					return false;
				break;
			case 11:
				if(cal.get(Calendar.DAY_OF_MONTH) == 25 || cal.get(Calendar.DAY_OF_MONTH) == 26)
					return false;
				break;
			}


			//			if((cal.get(Calendar.MONTH)!= 0 && cal.get(Calendar.DAY_OF_MONTH) != 1) && (cal.get(Calendar.MONTH)!=3 && cal.get(Calendar.DAY_OF_MONTH) != 18) &&
			//				(cal.get(Calendar.MONTH)!= 3 && cal.get(Calendar.DAY_OF_MONTH) != 21) && (cal.get(Calendar.MONTH)!= 4 && cal.get(Calendar.DAY_OF_MONTH) != 1) && 
			//					(cal.get(Calendar.MONTH)!= 11 && cal.get(Calendar.DAY_OF_MONTH) != 25) && (cal.get(Calendar.MONTH)!= 11 && cal.get(Calendar.DAY_OF_MONTH) != 26)){

			//			}

			//Comprueba que el sea horario de bolsa
			if(hora >= 9 && hora <= 17)
			{
				//En el caso de que sean las 5, deben ser menos que las 5 y 35
				if(hora == 17 && minutos > 35){
					System.out.println("Son las "+hora+" : " + minutos+".La bolsa acaba de cerrar.");
					return false;

				}
				
				return true;
			}

		}

		return false;
	}

	public static void main(){



	}



}

